// 引入TerserPlugin用于代码压缩
const TerserPlugin = require('terser-webpack-plugin');
// 导出Webpack配置对象
module.exports = {
    // 关闭内容哈希,速度会更快一点
    realContentHash: false,
    // 配置代码分割
    splitChunks: {
        cacheGroups: {
            // 定义一个名为'chunk-vendors'的缓存组，
            //用于包含所有从node_modules导入的库
            defaultVendors: {
                name: 'chunk-vendors',//缓存组的名称
                //是一个正则条件,如果模块的路径符合此正则的话会进行此缓存组
                test: /[//]node_modules[//]/,
                //优先级，如果一个模块属于多个缓存组，就会放入优先级更高的组里面
                priority: -10,
                //提取哪些代码块 initial async all
                chunks: 'initial'
            },
            // 定义一个名为'chunk-common'的缓存组，
            //用于包含两次或更多次用于不同文件的模块
            common: {
                //分组的名称
                name: 'chunk-common',
                //一个模块被引用几次会进入此分组
                minChunks: 2,
                //分组的优先级
                priority: -20,
                //针对同步导入
                chunks: 'initial',
                //如果一个代码块已经被 提取了，可以直接使用
                reuseExistingChunk: true
            }
        }
    },
    // 配置代码压缩工具
    minimizer: [
        new TerserPlugin({
            // 配置Terser压缩选项
            terserOptions: {
                compress: {
                    // 各种压缩选项
                    // ...
                    booleans: true,
                    if_return: true,
                    sequences: true,
                    unused: true,
                    conditionals: true,
                    dead_code: true,
                    evaluate: true
                },
                // 兼容Safari 10
                mangle: {
                    safari10: true
                }
            },
            // 开启多线程压缩
            parallel: true,
            // 不提取注释
            extractComments: false
        })
    ]
}